﻿<html lang="zh-cn" data-blockbyte-bs-uid="36122">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="referrer" content="never">
    <title>透过用户思维谈程序员的进阶之路 - CoderFocus - 博客园</title>
    <meta property="og:description" content="最近读了一本关于产品的好书 《用户思维+ 好产品让用户为自己尖叫》 ，虽然是一本产品相关的书，但是全书都在围绕如何 让你的用户变得更优秀 展开讨论。作者的观点很明确也很独到，可持续成功的产品都是由 推">
    <link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=svlZeZMvc3He7PqOD4T7SOuQn0_kIfLBYiy3idqd35Y1">
    <link id="MainCss" type="text/css" rel="stylesheet" href="/skins/Custom/bundle-Custom.css?v=Z683z9azGWin6jOfOyAHK6FgPVxm_nmCnl3EFztc2eE1">
    <link type="text/css" rel="stylesheet" href="/blog/customcss/343486.css?v=nf6J5LSbJr2LR%2fzXvXI4rdUofOc%3d">
    <link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="/skins/Custom/bundle-Custom-mobile.css?v=_msYCBCTPwxsehifP8ZdBI6kxamcIjzp-IKwPnrrPeg1">
    <link title="RSS" type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/songwenjie/rss">
    <link title="RSD" type="application/rsd+xml" rel="EditURI" href="https://www.cnblogs.com/songwenjie/rsd.xml">
    <link type="application/wlwmanifest+xml" rel="wlwmanifest" href="https://www.cnblogs.com/songwenjie/wlwmanifest.xml">
    <script src="https://cdn.ampproject.org/rtv/011904091426070/amp4ads-host-v0.js"></script>
    <script src="https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019041801.js"></script>
    <script async="" src="https://www.google-analytics.com/analytics.js"></script>
    <script src="//common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script>
    <script>var currentBlogId = 343486; var currentBlogApp = 'songwenjie', cb_enable_mathjax = false; var isLogined = false;</script>
    <script src="/bundles/blog-common.js?v=OFBZTzkHKauV7mtIFLF9jlqrX-sesK9-mY9KjurLrq01" type="text/javascript"></script>
    <link rel="preload" href="https://adservice.google.com/adsid/integrator.js?domain=www.cnblogs.com" as="script">
    <script type="text/javascript" src="https://adservice.google.com/adsid/integrator.js?domain=www.cnblogs.com"></script>
    <script src="https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019041801.js" async=""></script>
    <style class="blockbyte-bs-style" data-name="content">
        body > div#blockbyte-bs-indicator > div {
            opacity: 0;
            pointer-events: none
        }

        body > iframe#blockbyte-bs-sidebar.blockbyte-bs-visible, body > iframe#blockbyte-bs-overlay.blockbyte-bs-visible {
            opacity: 1;
            pointer-events: auto
        }

        body.blockbyte-bs-noscroll {
            overflow: hidden !important
        }

        body > div#blockbyte-bs-indicator > div {
            position: absolute;
            transform: translate3d(-40px, 0, 0);
            top: 0;
            left: 0;
            width: 40px !important;
            height: 100%;
            background: rgba(0,0,0,0.5);
            border-radius: 0 10px 10px 0;
            transition: opacity 0.3s, transform 0.3s;
            z-index: 2
        }

            body > div#blockbyte-bs-indicator > div > span {
                -webkit-mask: no-repeat center/32px;
                -webkit-mask-image: url(chrome-extension://jdbnofccmhefkmjbkkdkfiicjkgofkdh/img/icon-bookmark.svg);
                background-color: #ffffff;
                position: absolute;
                display: block;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%
            }

        body > div#blockbyte-bs-indicator[data-pos='right'] {
            left: auto;
            right: 0
        }

            body > div#blockbyte-bs-indicator[data-pos='right'] > div {
                transform: translate3d(40px, 0, 0);
                left: auto;
                right: 0;
                border-radius: 10px 0 0 10px
            }

        body > div#blockbyte-bs-indicator.blockbyte-bs-fullHeight > div {
            border-radius: 0
        }

        body > div#blockbyte-bs-indicator.blockbyte-bs-hover > div {
            transform: translate3d(0, 0, 0);
            opacity: 1
        }

        body > div#blockbyte-bs-indicator[data-pos='left'].blockbyte-bs-has-lsb {
            height: 100% !important;
            top: 0 !important
        }

            body > div#blockbyte-bs-indicator[data-pos='left'].blockbyte-bs-has-lsb > div {
                background: transparent
            }

                body > div#blockbyte-bs-indicator[data-pos='left'].blockbyte-bs-has-lsb > div > span {
                    -webkit-mask-position-y: 20px
                }

        body > iframe#blockbyte-bs-sidebar {
            width: 350px;
            max-width: none;
            height: 0;
            z-index: 2147483646;
            background-color: rgba(255,255,255,0.8) !important;
            border: none;
            display: block !important;
            transform: translate3d(-350px, 0, 0);
            transition: width 0s 0.3s, height 0s 0.3s, opacity 0.3s, transform 0.3s
        }

            body > iframe#blockbyte-bs-sidebar[data-pos='right'] {
                left: auto;
                right: 0;
                transform: translate3d(350px, 0, 0)
            }

            body > iframe#blockbyte-bs-sidebar.blockbyte-bs-visible {
                width: calc(100% + 350px);
                height: 100%;
                transform: translate3d(0, 0, 0);
                transition: opacity 0.3s, transform 0.3s
            }

            body > iframe#blockbyte-bs-sidebar.blockbyte-bs-hideMask {
                background: none !important
            }

                body > iframe#blockbyte-bs-sidebar.blockbyte-bs-hideMask:not(.blockbyte-bs-hover) {
                    width: calc(350px + 50px)
                }

        body > iframe#blockbyte-bs-overlay {
            width: 100%;
            max-width: none;
            height: 100%;
            z-index: 2147483647;
            border: none;
            background: rgba(0,0,0,0.5) !important;
            transition: opacity 0.3s
        }
    </style>
    <style type="text/css">
        .heart {
            width: 10px;
            height: 10px;
            position: fixed;
            background: #f00;
            transform: rotate(45deg);
            -webkit-transform: rotate(45deg);
            -moz-transform: rotate(45deg);
        }

            .heart:after, .heart:before {
                content: '';
                width: inherit;
                height: inherit;
                background: inherit;
                border-radius: 50%;
                -webkit-border-radius: 50%;
                -moz-border-radius: 50%;
                position: absolute;
            }

            .heart:after {
                top: -5px;
            }

            .heart:before {
                left: -5px;
            }
    </style>
    <link rel="prefetch" href="https://tpc.googlesyndication.com/safeframe/1-0-32/html/container.html">
</head>
<body>
    <a name="top"></a>


    <!--done-->
    <div id="home">
        <div id="header" style="display: block;">
            <div id="blogTitle">
            </div><!--end: blogTitle 博客的标题和副标题 -->
            <div id="navigator">
                <div class="blogStats">
                </div><!--end: blogStats -->
            </div><!--end: navigator 博客导航栏 -->
        </div><!--end: header 头部 -->

        <div id="main">
            <div id="mainContent">
                <div class="forFlow" style="margin: 0px auto; max-width: 960px;">

                    <div id="post_detail">
                        <!--done-->
                        <div id="topics">
                            <div class="post">
                                <h1 class="postTitle">
                                    <a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/songwenjie/p/9545221.html">透过用户思维谈程序员的进阶之路</a>
                                </h1>
                                <div class="clear"></div>
                                <div class="postBody">
                                    <div id="cnblogs_post_body" class="blogpost-body cnblogs-markdown">
                                        <p>最近读了一本关于产品的好书<strong>《用户思维+ 好产品让用户为自己尖叫》</strong>，虽然是一本产品相关的书，但是全书都在围绕如何<strong>让你的用户变得更优秀</strong>展开讨论。作者的观点很明确也很独到，可持续成功的产品都是由<strong>推荐</strong>（口碑传播）产生的。而激发这些推荐的是用户对自己的感觉，也就是我们的产品或服务帮助他们做了什么或成为什么样子。这可能也是知识付费这几年火热的原因之一吧。</p>
                                        <p>这本书的作者可谓将用户思维挖掘到了极致，这一点在此书中随处可见。可以这么讲，这本书本身就非常的用户思维，在关键的观点或知识点上，总是配有恰到好处的生动插图，读起来毫不费劲，想象一下《Head First》系列图书的画风。奥对了，这本书的作者Kathy Sierra就是Head First系列图书的策划人之一。</p>
                                        <p>我在读这本书的时候，更多的是将自己当成了书中的用户。所以读完之后最大的感触就是，我能不能运用书中讲的这些让自己变得更优秀呢？毕竟用户思维就是一切从用户出发。思考过后，我觉得是可以的。从这个角度而言，这本书已经超出了讨论如何做好产品的范围，着重的是用户思维中的<strong>思维</strong>这两个字。而这种思维就是译者序中提到的<strong>成长型思维</strong>模式。这也是我写此文的目的，希望这种成长型思维能对自己的进阶之路有借鉴意义。如果能对大家也有所帮助，那就再好不过了。</p>
                                        <h2 id="esa_index_0">如何做到保持理想成长曲线呢？</h2>
                                        <p><strong>用户理想成长曲线：</strong></p>
                                        <p><img src="http://songwenjie.vip/blog/180826/7cLJFdB7g3.png?imageslim" alt="mark"></p>
                                        <p>若是顺着成长曲线向右上方移动，最终我们将达到专家（某一领域）的高度。但其实我们大多数人只是想变得更好一些而已，一点点进步就会非常明显。那么如何做才能顺着成长曲线向右上方快速移动，甚至接近理想曲线呢？或许可以从专家身上找到答案，首先我们需要了解一下什么是专家？</p>
                                        <p>专家不只是指他们知道什么。重要的是，他们能将已有的知识应用到实践中。而且，他们可将这一过程<strong>一次次地重现</strong>。在一个领域中，给定一项具有代表性的任务，专家的完成情况更好、更可靠。</p>
                                        <p>然后我们再来看看专家是如何做的？</p>
                                        <ul>
                                            <li><strong>持续不断地构建技能</strong></li>
                                            <li><strong>保持渴望成功的愿望</strong></li>
                                        </ul>
                                        <h2 id="esa_index_1" data-id="123" name="haha">持续不断地构建技能</h2>
                                        <h3 id="esa_index_2">构建技能</h3>
                                        <p>要想具备专业能力，就必须构建专业技能。技能的构建就是将一项技能由“<strong>不能做</strong>”移动到“<strong>能做</strong>”。能做又划分为两种类别：费力（不可靠）和精通（可靠、已内化）。</p>
                                        <p>我们设想中的技能构建过程可能是这样：</p>
                                        <p><img src="http://songwenjie.vip/blog/180826/gBfI62i5Fc.png?imageslim" alt="mark"></p>
                                        <p>但是，这不是一条通向高水平专业能力的有效途径：</p>
                                        <p><img src="http://songwenjie.vip/blog/180826/J7fAmHgiBk.png?imageslim" alt="mark"></p>
                                        <p>
                                            我们看一下专家是如何做的：<br>
                                            <img src="http://songwenjie.vip/blog/180826/cHimhbie21.png?imageslim" alt="mark">
                                        </p>
                                        <ul>
                                            <li>专家从不停止增加新的技能。</li>
                                            <li>专家既有意识地构建技能，也无意识地构建技能。</li>
                                            <li>专家会改进现有的技能。</li>
                                        </ul>
                                        <p>我们应该格外注意这个过程：</p>
                                        <p><img src="http://songwenjie.vip/blog/180826/9h62Ehj8HL.png?imageslim" alt="mark"></p>
                                        <p>刀不磨要生锈，那些无需我们有意识练习的技能将慢慢退化。所以仅仅使用是不够的，还需要拿出来有意识的练习。</p>
                                        <h4 id="esa_index_3">刻意练习</h4>
                                        <p>我们经常会有这种感觉，在某一项技能的练习上，我们付出了努力，也付出了时间，但是效果就是不理想。很多人可能会将此归咎为自己笨，没有天赋；其实并不是，很有可能是自己练习的姿势不对。</p>
                                        <p>在时间一样的情况下，专家会将更多的时间放在<strong>刻意练习</strong>上，注意可以<strong>刻意练习不是刻意地练习</strong>。可以练习有助于防止陷入平庸，这是因为：<strong>精通半个技能完胜一堆半生不熟的技能</strong>。</p>
                                        <p><img src="http://songwenjie.vip/blog/180826/i2BiAjKBcH.png?imageslim" alt="mark"></p>
                                        <p>通常情况下，更细粒度的子技能学习法是构建技能的最佳途径，但是没有人愿意把一周的时间都用在简单的练习上。刻意练习总是恰好超出我们当前的能力范围（舒适区）。这一点非常重要，如果我们练习那些远超出当前能力的技能，很可能会因为太困难、长时间没有反馈而放弃。而如果一直练习没有难度没有挑战的技能，后果可能会更严重，我们在平庸阶段进行的练习越多，对平庸技能的强化就越大，并且练习造成的影响是永久的。</p>
                                        <p><img src="http://songwenjie.vip/blog/180826/C6d8l5g9hj.png?imageslim" alt="mark"></p>
                                        <p><strong>刻意练习的简明原则：完成一项细粒度的任务，经过一到三组45-90分钟的练习就能达到95%的精通度。</strong></p>
                                        <p>如果无法达到这一要求，我们可以将任务划分为更小的子任务，或者降低要求和标准。</p>
                                        <ul>
                                            <li><strong>如果这项任务或技能过于复杂</strong>（未精通的技能过多），<strong>就将其划分为更细粒度的子任务或子技能</strong><img src="http://songwenjie.vip/blog/180826/gDCJa01aLJ.png?imageslim" alt="mark"></li>
                                            <li><strong>如果这一任务并不复杂，只是难度太高了，则降低要求或标准</strong></li>
                                        </ul>
                                        <p><img src="http://songwenjie.vip/blog/180826/mGLlBcjI9I.png?imageslim" alt="mark"></p>
                                        <p>但是大多数人在大多数的专业能力成长曲线上遇到的最大问题是，<strong>阶段B堆积了太多东西</strong>。与一次只做一件事情相反，我们想要同时学习和练习的东西太多了。这种形式的技能堆砌会拖慢进步速度、扼杀进步。</p>
                                        <p><img src="http://songwenjie.vip/blog/180826/E2JIiIIC9e.png?imageslim" alt="mark"></p>
                                        <p>专家将更多的时间放在<strong>刻意练习</strong>，给了我们借鉴的意义。程序员这个职业，不学习就会被淘汰，学习就意味着要构建新的技能，丰富自己的技能库。这个时候就可以运用上面的刻意练习的方式。首先我们要明确自己学习的目标，学习此技能能帮助我们完成什么，是否值得我们学习，切莫贪大贪全，应该确定自己的核心竞争力是什么。以阅读优秀源码（至于为什么阅读源代码，后面有提到）为例，一般一个项目的源码到了值得阅读学习的阶段，此项目应该已经比较成熟了。那么此项目的代码量以及代码难度应该都是不小的，如果从最新最全的版本开始看起，很容易就因为太困难放弃了。那么此时就可以进行任务拆解，可以从比较早期的版本看起，这个时期的代码量比较小，代码设计要比较好理解。或者是可以研究此项目中其中一个功能，掌握以后再切换到别的功能上。例如研究数据库，数据库发展到现在，其中的实现无比复杂。那么我们就可以从其中的几个主要的功能特性入手，比如索引、锁之类。</p>
                                        <p>此外我们需要格外注意上面提到的两个问题，一个是<strong>阶段B堆积了太多东西</strong>，我们想学习的东西太多，但是精力有限。此时应该收缩战线，专注构建最重要的技能。<strong>精通半个技能完胜一堆半生不熟的技能</strong>。另一个是<strong>我们在平庸阶段进行的练习越多，对平庸技能的强化就越大，并且练习造成的影响是永久的</strong>。有很多工作年限比较久的程序员，专业能力还不如刚工作几年的新人。究其原因，都是因为不努力吗？不然，他们也努力了，只不过他们待在舒适区的时间太长了。</p>
                                        <h3 id="esa_index_4">感性接触</h3>
                                        <p>我们会经常听到这么一个观点，中国人学不好英语，是因为中国人从来不用英语，只是单纯的死记硬背。同样的道理，专家之所以成为专家，是因为专家周围的环境更好，<strong>他们接触了大量高质量的专业技能</strong>。中国有句古话，“近朱者赤，近墨者黑”，也是同样的道理。放在现在就是，如果你身边都是优秀的人，那你多半也差不到哪里去。但是，<strong>除非满足特定的条件，否则简单地接触专业人士并不能帮助你构建专业能力</strong>。</p>
                                        <p>书中有个很生动的例子，小鸡性别鉴定。辨别刚出生的小鸡的性别异常困难，但是更早的辨别出小鸡性别，将公鸡和母鸡分开，有助于更快的进入鸡蛋生产环节。在20世纪初，日本人开发了一套鉴别小鸡性别的方法，但是只有很少的几位专家掌握了这一技能。现在的关键是培训具备这一技能的新手，便可以大规模应用这一技能。问题是身为掌握这一技能的专家也不知道自己是如何做到的。<strong>你的大脑能够学习一些你无法学习的东西，这不是什么魔法，而是感性知识。</strong></p>
                                        <p>他们是这样培训新人的，让新人随意指出小鸡的性别，只是随意的猜测。然后小鸡性别鉴定专家给予新人反馈，对，不对，不对，对。新人的每次猜测都会得到专家的反馈。终于，随着时间的流逝，新人在小鸡性别鉴定方面的表现越来越好了。只不过这时候新人还是不知道这是为什么？</p>
                                        <blockquote>
                                            <p>其实在接触足够多的反馈之后，你的大脑在无需意识介入的情况下，开始发现模式和潜在的结构，伴随着更多的接触，你的大脑开始精心调整它的感知能力，最终找到真正的解决方案。你的大脑能够觉察更加细微的特征，将信号和噪声区别开来，即使你无法解释其中的原理。</p>
                                        </blockquote>
                                        <p>所有领域的专家都在学习和利用无意识的感性知识，他们的大脑知道的东西远比展现出来的多得多。</p>
                                        <p><img src="http://songwenjie.vip/blog/180827/0i6m43beBH.png?imageslim" alt="mark"></p>
                                        <p>当你接触了大量多样化的实例时，你的大脑便开始观察什么是不变的。在感性学习能够发挥作用的地方，“发现”其实比“讲授”更有效。我们的目标就是通过展现更好的实例，帮助自己变得更加优秀。</p>
                                        <p>现在知道为什么要读源码学习了吧，而且要读优秀的源码。你无需观察优秀程序员是如何编写代码的，只需要阅读很多优质代码即可。所以不要把自己写不出好代码的原因归咎于身边没有大牛，也不要妄想着要是有个大牛带带我写代码就好了。</p>
                                        <p>那么要不要看烂代码呢？要看！因为有时候这不是你想不想看的问题，而是你不得不看，是项目就会有烂代码。<strong>当你确实需要展示或者阅读错误或不良的实例时，要营造不适感。</strong>我曾经和我的组员说，有时候阅读烂代码反而比阅读优秀代码进步更快。但是前提是你要能识别出什么是好代码，或者什么是烂代码。当你看到烂代码时，你就会打心底里嫌弃，然后就是想办法去改造它，这就是进步的机会啊。<strong>学习鉴别“不良”实例的最佳办法，就是学习“优秀”实例的潜藏模式。</strong>《重构 改善既有代码的设计》这本书就是这样做的，首先明确指出烂代码都有哪些特点，然后才是针对这些特点的代码重构方法和解决方案。</p>
                                        <h2 id="esa_index_5">保持渴望成功的愿望</h2>
                                        <h3 id="esa_index_6">排除障碍</h3>
                                        <p>如何能保证自己顺着理想成长曲线不断前进呢？要知道在愿望和现实之间存在着一条鸿沟。有一些东西干扰了我们，有两种不同类型的干扰性鸿沟。</p>
                                        <ul>
                                            <li>技能鸿沟</li>
                                        </ul>
                                        <p><img src="http://songwenjie.vip/blog/180827/JG475GG0b7.png?imageslim" alt="mark"></p>
                                        <ul>
                                            <li>关系鸿沟</li>
                                        </ul>
                                        <p><img src="http://songwenjie.vip/blog/180827/f1F5h7CgCf.png?imageslim" alt="mark"></p>
                                        <p>第一次学习编程的你会遭受很多痛苦。任何一件值得你付出的事情，都是如此。所以当我们面对困难时，第一件事就是要承认困难。人们之所以在遭遇困难时放弃，并不是因为他们遭遇了困难。这是因为他们不知道他们的境遇是正常的。这是因为他们不知道他们的努力方向是正确的。这是因为他们不知道其他人也会在同一阶段遭遇困难。那些放弃的人们，没有意识到，困难只是暂时的，也是正常的。</p>
                                        <p>在承认困难之后，我们还要对成长曲线上可能会遇到的问题做出<strong>预测和补偿</strong>。预测出可能会干扰我们前进的因素。比如我自己在看书时，会将手机静音放到自己够不到的地方去。这样我就不会一直惦记手机会不会有消息，等到看完书再处理就是了。然后要对自己遇到的困难做出补偿，以编程为例，我们遇到的问题基本上前辈们都遇到过，这个时候善用搜索引擎就非常有用了。论坛和社区也非常重要。</p>
                                        <h3 id="esa_index_7">进步+回报</h3>
                                        <p>我们知道了阻碍我们前进的因素，但是吸引我们前进的因素是什么呢？我觉得是<strong>成就感</strong>。成长路线上所收获的，会让我们获得成就感。如果我们没能从进步中获得任何好处，一切将变得没有任何意义。所以规划好成长路径图就非常重要了，仅仅知道有这么一条成长路径存在，就是强烈的动机来源。</p>
                                        <p>对于程序员而言，<strong>制作一份技能清单，内容涵盖从初级到高级的技能</strong>。然后将其划分为不同的级别和层次。一种可行的做法是，在每个层次所花费的时间是前一个层次的两倍。即使这条路径不是最佳也无所谓，因为重要的不是路径，而是取得进步。让我们大胆一些，尽管尝试就是了。另外<strong>使用领域特定的专业术语进行交流，不仅有用，而且也是一种激励</strong>。所以和同事交流，或者写博客分享我们的技巧都是很好的激励方式。</p>
                                        <h2 id="esa_index_8">维护认知资源</h2>
                                        <p>1999年，Baba Shiv教授以及165位大学生一起开展了一项简单的实验。他要求一半的学生记忆一个7位数，其余学生记忆一个2位数。</p>
                                        <p><img src="http://songwenjie.vip/blog/180827/bcI1ih3d0E.png?imageslim" alt="mark"></p>
                                        <p>上图中的结果，可能很多人认为是大脑在工作之后需要更多的卡路里，需要吃点蛋糕补充能量。但是研究人员向我们揭示了一个违反直觉、令人震惊的事实：</p>
                                        <p><strong>意志力与认知加工能力从同一个资源池中获取能量。</strong></p>
                                        <p>记忆7位数的参与者选择蛋糕，不仅是因为他们大脑需要更多的热量，还因为这项记忆性任务耗尽了他们抵抗蛋糕诱惑的意志力。所以我们应该<strong>确保自己把稀缺、易耗的认知资源用在正确的事情上。核心任务就是减少资源泄露</strong>。</p>
                                        <h3 id="esa_index_9">减少认知泄露</h3>
                                        <ul>
                                            <li>
                                                <p>要想减少认知泄露，应该把认知工作委托给外部世界（这样它就不会滞留在用户的大脑中）</p>
                                                <p>我们的大脑每次只能专注于一件事情，对于未完成或者中断的任务，我们的大脑会为其保留一个“后台进程”，多任务切换会耗尽大脑的能量。人们更容易记住未完成或不完整的任务，这就是<strong>蔡加尼克效应</strong>。</p>
                                            </li>
                                            <li>
                                                <p>要想减少认知泄露，不要让用户选择</p>
                                                <p>选择是一种代价昂贵的认知开销。之前看过一篇文章，讲的是不要在你的卧室内学习或者工作。这一点我深以为然，学习本来就是一件违反人性的行为，选择在卧室内学习或者工作，很可能整个周末都是在起床学习工作还是躺在床上休息中的纠结中度过。所以干脆不要给自己选择的机会，我现在就是周末会抽一天很早起床，然后直接去公司，断了自己想偷懒的想法。</p>
                                            </li>
                                            <li>
                                                <p>要想减少认知泄露，帮助用户内化技能</p>
                                                <p>位于阶段B的技能会消耗大量的认知资源，位于阶段C的技能所消耗的认知资源则很少。所以我们宁愿只精通一项技能，也不要同时学习过多的技能。</p>
                                            </li>
                                            <li>
                                                <p>要想减少认知泄露，减少对意志力的需求</p>
                                                <p>自控力和意志力是昂贵的认知资源开销。要想减少用户对意志力的需求，就假设它们根本不存在，帮助他们养成习惯。习惯只需要很少的意志力或者无需意志力。但是我们的关注点应该不仅仅在于养成新的习惯，我们必须升级或者替换掉那些容易招致平台期和中等技能困境的不良习惯。</p>
                                            </li>
                                        </ul>
                                        <h3 id="esa_index_10">穿越大脑的垃圾过滤器</h3>
                                        <p>我们的大脑总是努力区分噪声和信号，这其实是好事，只不过我们无法控制这个过滤器。所以我们需要做另外一件事，<strong>阻止大脑把我们应该关注的事情当成垃圾</strong>。</p>
                                        <p>我们必须帮助大脑同意：</p>
                                        <ul>
                                            <li>这是一件值得关注的事情</li>
                                            <li>这是一件值得集中注意力的事情</li>
                                            <li>这是一件值得记住的事情</li>
                                        </ul>
                                        <p><strong>大脑喜欢即学即用式学习，而不是储备式学习。</strong>这也是为什么同样的工作时间，不同的人能力提升却差别很大。如果你的工作是极具挑战性的，那么你就需要一直学习新的技能来满足工作的需要，并且都是即学即用式学习，这可是我们的大脑所喜欢的。相反，你的工作没有任何挑战性，即使你在不断学习，但是始终用不到学到的新技能。我们经常会有这种感觉，很多当时学会的东西，过一段时间基本就忘却了，因为我们的大脑不喜欢储备式学习。所以我们可以利用技能映射验证知识的有用性，通过将知识映射为技能来验证（减少）必须学习的知识。直接把多余的知识删除、删除、删除。</p>
                                        <p><img src="http://songwenjie.vip/blog/180827/ggE9A9ifhG.png?imageslim" alt="mark"></p>
                                        <p><strong>利用应用场景说服大脑。</strong>当我们学习很抽象的技能，不好理解和记忆时，可以尝试利用应用场景来说服大脑。例如在学习Redis的5种基本数据结构（现在是6种了）时，就可以思考每种结构可以应用在什么场景？hash可以用于记录帖子的点赞数、评论数和点击数；zset可以用于记录热榜帖子ID等等。</p>
                                        <h2 id="esa_index_11">最后</h2>
                                        <p><strong>努力吧，骚年，成就卓越的自己</strong></p>
                                        <p><img src="http://songwenjie.vip/blog/180827/mB17lfhFcF.png?imageslim" alt="mark"></p>
                                        <div class="esa-post-signature">
                                            <p>作者：<a style="color: red; font-family: 微软雅黑; text-decoration: none" href="http://songwenjie.cnblogs.com/" target="_blank">CoderFocus</a></p>
                                            <p>
                                                微信公众号：<br>
                                                <img src="http://songwenjie.vip/blog/180511/AFdec5f65k.jpg?imageslim" title="关注公众号，获取最新更新">
                                            </p>
                                            <p>声明：本文为博主学习感悟总结，水平有限，如果不当，欢迎指正。如果您认为还不错，不妨点击一下下方的<span onclick="Digg();">【<font color="red">推荐</font>】</span>按钮，谢谢支持。转载与引用请注明作者及出处。</p>
                                        </div>
                                    </div><div id="MySignature"></div>
                                    <div class="clear"></div>
                                    <div id="blog_post_info_block">
                                        <div id="BlogPostCategory"></div>
                                        <div id="EntryTag"></div>
                                        <div id="blog_post_info">
                                            <div id="green_channel">
                                                <a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(9545221,cb_blogId,1);green_channel_success(this,'谢谢推荐！');">好文要顶</a>
                                                <a id="green_channel_follow" onclick="follow('87ccd643-b5bf-e611-845c-ac853d9f53ac');" href="javascript:void(0);">关注我</a>
                                                <a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>
                                                <a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>
                                                <a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a>
                                            </div>
                                            <div id="author_profile">
                                                <div id="author_profile_info" class="author_profile_info">
                                                    <a href="http://home.cnblogs.com/u/songwenjie/" target="_blank"><img src="//pic.cnblogs.com/face/1078987/20180419003727.png" class="author_avatar" alt=""></a>
                                                    <div id="author_profile_detail" class="author_profile_info">
                                                        <a href="http://home.cnblogs.com/u/songwenjie/">CoderFocus</a><br>
                                                        <a href="http://home.cnblogs.com/u/songwenjie/followees">关注 - 78</a><br>
                                                        <a href="http://home.cnblogs.com/u/songwenjie/followers">粉丝 - 157</a>
                                                    </div>
                                                </div>
                                                <div class="clear"></div>
                                                <div id="author_profile_honor"></div>
                                                <div id="author_profile_follow">
                                                    <a href="javascript:void(0);" onclick="follow('87ccd643-b5bf-e611-845c-ac853d9f53ac');return false;">+加关注</a>
                                                </div>
                                            </div>
                                            <div id="div_digg" style="width: 200px;">
                                                <div class="diggit" onclick="votePost(9545221,'Digg')">
                                                    <span class="diggnum" id="digg_count">6</span>
                                                </div>
                                                <div class="buryit" onclick="votePost(9545221,'Bury')">
                                                    <span class="burynum" id="bury_count">0</span>
                                                </div>
                                                <div class="clear"></div>
                                                <div class="diggword" id="digg_tips">
                                                </div>
                                            </div>
                                            <script type="text/javascript">
                                                currentDiggType = 0;
                                            </script>
                                        </div>
                                        <div class="clear"></div>
                                        <div id="post_next_prev"><a href="https://www.cnblogs.com/songwenjie/p/9515697.html" class="p_n_p_prefix">« </a> 上一篇：<a href="https://www.cnblogs.com/songwenjie/p/9515697.html" title="发布于2018-08-22 09:01">C#委托之我见</a><br><a href="https://www.cnblogs.com/songwenjie/p/9563763.html" class="p_n_p_prefix">» </a> 下一篇：<a href="https://www.cnblogs.com/songwenjie/p/9563763.html" title="发布于2018-08-31 08:24">MySQL——优化嵌套查询和分页查询</a><br></div>
                                    </div>


                                </div>
                                <div class="postDesc">posted @ <span id="post-date">2018-08-28 09:25</span> <a href="https://www.cnblogs.com/songwenjie/">CoderFocus</a> 阅读(<span id="post_view_count">695</span>) 评论(<span id="post_comment_count">2</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=9545221" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(9545221);return false;">收藏</a></div>
                            </div>
                            <script src="//common.cnblogs.com/highlight/9.12.0/highlight.min.js"></script>
                            <script>markdown_highlight();</script>
                            <script type="text/javascript">var allowComments = true, cb_blogId = 343486, cb_entryId = 9545221, cb_blogApp = currentBlogApp, cb_blogUserGuid = '87ccd643-b5bf-e611-845c-ac853d9f53ac', cb_entryCreatedDate = '2018/8/28 9:25:00'; loadViewCount(cb_entryId); var cb_postType = 1; var isMarkdown = true;</script>

                        </div><!--end: topics 文章、评论容器-->
                    </div><a name="!comments"></a><div id="blog-comments-placeholder">
                        <div id="comments_pager_top"></div>
                        <br>
                        <div class="feedback_area_title">评论列表</div>
                        <div class="feedbackNoItems"></div>

                        <div class="feedbackItem">
                            <div class="feedbackListSubtitle">
                                <div class="feedbackManage">
                                    &nbsp;&nbsp;<span class="comment_actions"></span>
                                </div>
                                <a href="#4052278" class="layer">#1楼</a><a name="4052278" id="comment_anchor_4052278"></a>  <span class="comment_date">2018-08-28 11:42</span> <a id="a_comment_author_4052278" href="https://www.cnblogs.com/lost0/" target="_blank">码农之一</a> <a href="http://msg.cnblogs.com/send/%E7%A0%81%E5%86%9C%E4%B9%8B%E4%B8%80" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
                            </div>
                            <div class="feedbackCon">
                                <div class="esa-comment-avatar"><a target="_blank" href="https://www.cnblogs.com/lost0/"><img src="https://pic.cnblogs.com/face/sample_face.gif"></a></div><div id="comment_body_4052278" class="blog_comment_body">我居然一点都没看懂</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4052278,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(4052278,'Bury',this)">反对(0)</a></div>
                            </div>
                        </div>

                        <div class="feedbackItem">
                            <div class="feedbackListSubtitle">
                                <div class="feedbackManage">
                                    &nbsp;&nbsp;<span class="comment_actions"></span>
                                </div>
                                <a href="#4052697" class="layer">#2楼</a><a name="4052697" id="comment_anchor_4052697"></a><span id="comment-maxId" style="display:none;">4052697</span><span id="comment-maxDate" style="display:none;">2018/8/28 18:51:42</span>  <span class="comment_date">2018-08-28 18:51</span> <a id="a_comment_author_4052697" href="https://www.cnblogs.com/Iamsorry/" target="_blank">小书丶</a> <a href="http://msg.cnblogs.com/send/%E5%B0%8F%E4%B9%A6%E4%B8%B6" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
                            </div>
                            <div class="feedbackCon">
                                <div class="esa-comment-avatar"><a target="_blank" href="https://www.cnblogs.com/Iamsorry/"><img src="https://pic.cnblogs.com/face/799778/20150818145405.png"></a></div><div id="comment_body_4052697" class="blog_comment_body">写的不错~立马就去看了下Head first</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4052697,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(4052697,'Bury',this)">反对(0)</a></div><span id="comment_4052697_avatar" style="display:none;">http://pic.cnblogs.com/face/799778/20150818145405.png</span>
                            </div>
                        </div>
                        <div id="comments_pager_bottom"></div>
                    </div>
                    <script type="text/javascript">var commentManager = new blogCommentManager(); commentManager.renderComments(0);</script>
                    <div id="comment_form" class="commentform">
                        <a name="commentform"></a>
                        <div id="divCommentShow"></div>
                        <div id="comment_nav"><span id="span_refresh_tips"></span><a href="javascript:void(0);" onclick="return RefreshCommentList();" id="lnk_RefreshComments" runat="server" clientidmode="Static">刷新评论</a><a href="#" onclick="return RefreshPage();">刷新页面</a><a href="#top">返回顶部</a></div>
                        <div id="comment_form_container"><div class="login_tips">注册用户登录后才能发表评论，请 <a rel="nofollow" href="javascript:void(0);" class="underline" onclick="return login('commentform');">登录</a> 或 <a rel="nofollow" href="javascript:void(0);" class="underline" onclick="return register();">注册</a>，<a href="http://www.cnblogs.com">访问</a>网站首页。</div></div>
                        <div class="ad_text_commentbox" id="ad_text_under_commentbox"></div>
                        <div id="ad_t2"><a href="http://www.ucancode.com/index.htm" target="_blank" onclick="ga('send', 'event', 'Link', 'click', 'T2-工控')">【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码</a><br><a href="https://ke.qq.com/adActivity.html?name=xiangxueketang2" target="_blank" onclick="ga('send', 'event', 'Link', 'click', 'T2-享学')">【培训】IT职业生涯指南，Java程序员薪资翻3倍的秘密</a><br><a href="https://group.cnblogs.com/topic/81220.html" target="_blank" onclick="ga('send', 'event', 'Link', 'click', 'T2-咕泡')">【培训】架构师开发十年，就只剩下这套架构体系了</a><br><a href="https://gitee.com/enterprises?from=bky-2" target="_blank" onclick="ga('send', 'event', 'Link', 'click', 'T2-gitee')">【推荐】专业便捷的企业级代码托管服务 - Gitee 码云</a><br></div>
                        <div id="opt_under_post"></div>
                        <script async="async" src="https://www.googletagservices.com/tag/js/gpt.js"></script>
                        <script>
                            var googletag = googletag || {};
                            googletag.cmd = googletag.cmd || [];
                        </script>
                        <script>
                            googletag.cmd.push(function () {
                                googletag.defineSlot('/1090369/C1', [300, 250], 'div-gpt-ad-1546353474406-0').addService(googletag.pubads());
                                googletag.defineSlot('/1090369/C2', [468, 60], 'div-gpt-ad-1539008685004-0').addService(googletag.pubads());
                                googletag.pubads().enableSingleRequest();
                                googletag.enableServices();
                            });
                        </script>
                        <div id="cnblogs_c1" class="c_ad_block" style="">
                            <div id="div-gpt-ad-1546353474406-0" style="height:250px; width:300px;" data-google-query-id="CNqRzdaG6OECFVxevQodRVwAXQ"><div id="google_ads_iframe_/1090369/C1_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C1_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C1_0" width="300" height="250" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" srcdoc="" data-google-container-id="1" style="border: 0px; vertical-align: bottom;" data-load-complete="true"></iframe></div></div>
                        </div>
                        <div id="under_post_news"></div>
                        <div id="cnblogs_c2" class="c_ad_block" style="">
                            <div id="div-gpt-ad-1539008685004-0" style="height:60px; width:468px;" data-google-query-id="CNuRzdaG6OECFVxevQodRVwAXQ"><div id="google_ads_iframe_/1090369/C2_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C2_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C2_0" width="468" height="60" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" srcdoc="" data-google-container-id="2" style="border: 0px; vertical-align: bottom;" data-load-complete="true"></iframe></div></div>
                        </div>
                        <div id="under_post_kb"></div>
                        <div id="HistoryToday" class="c_ad_block"></div>
                        <script type="text/javascript">
                            if (enablePostBottom()) {
                                codeHighlight();
                                fixPostBody();
                                setTimeout(function () { incrementViewCount(cb_entryId); }, 50);
                                deliverT2();
                                deliverC1();
                                deliverC2();
                                loadNewsAndKb();
                                loadBlogSignature();
                                LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
                                GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType);
                                loadOptUnderPost();
                                GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);
                            }
                        </script>
                    </div>


                </div><!--end: forFlow -->
            </div><!--end: mainContent 主体内容容器-->

            <div id="sideBar" style="display: none;">
                <div id="sideBarMain">

                    <!--done-->
                    <div class="newsItem">
                        <h3 class="catListTitle">公告</h3>
                        <div id="blog-news">
                            <script type="text/javascript">window['__document_write_ajax_callbacks__']['4']();</script>
                            <script type="text/javascript">window['__document_write_ajax_callbacks__']['5']();</script>
                            <script>window['__document_write_ajax_callbacks__']['1']();</script>
                            <script type="text/javascript">window['__document_write_ajax_callbacks__']['6']();</script>
                            <script type="text/javascript">window['__document_write_ajax_callbacks__']['2']();</script><div id="profile_block">
                                昵称：<a href="https://home.cnblogs.com/u/songwenjie/">CoderFocus</a><br>园龄：<a href="https://home.cnblogs.com/u/songwenjie/" title="入园时间：2016-12-11">2年4个月</a><br>粉丝：<a href="https://home.cnblogs.com/u/songwenjie/followers/">157</a><br>关注：<a href="https://home.cnblogs.com/u/songwenjie/followees/">78</a><div id="p_b_follow"><a href="javascript:void(0);" onclick="follow('87ccd643-b5bf-e611-845c-ac853d9f53ac')">+加关注</a></div>
                                <script type="text/javascript">window['__document_write_ajax_callbacks__']['7']();</script>
                                <script>window['__document_write_ajax_callbacks__']['3']();</script>
                            </div>
                        </div>
                        <script type="text/javascript">loadBlogNews();</script>
                    </div>

                    <div id="blog-calendar" style="display:none"></div>
                    <script type="text/javascript">loadBlogDefaultCalendar();</script>

                    <div id="leftcontentcontainer">
                        <div id="blog-sidecolumn">
                            <div id="sidebar_search" class="sidebar-block"></div><div id="sidebar_toptags" class="sidebar-block"></div><div id="sidebar_categories">
                                <div id="sidebar_postcategory" class="catListPostCategory sidebar-block">
                                    <h3 class="catListTitle">随笔分类</h3>

                                    <ul>

                                        <li><a id="CatList_LinkList_0_Link_0" href="https://www.cnblogs.com/songwenjie/category/1201671.html">.NET(2)</a> </li>

                                        <li><a id="CatList_LinkList_0_Link_1" href="https://www.cnblogs.com/songwenjie/category/1201670.html">C#(3)</a> </li>

                                        <li><a id="CatList_LinkList_0_Link_2" href="https://www.cnblogs.com/songwenjie/category/1268974.html">MySQL(10)</a> </li>

                                        <li><a id="CatList_LinkList_0_Link_3" href="https://www.cnblogs.com/songwenjie/category/1182670.html">SQL(5)</a> </li>

                                        <li><a id="CatList_LinkList_0_Link_4" href="https://www.cnblogs.com/songwenjie/category/1182671.html">Websocket(1)</a> </li>

                                        <li><a id="CatList_LinkList_0_Link_5" href="https://www.cnblogs.com/songwenjie/category/1208582.html">软件设计(14)</a> </li>

                                        <li><a id="CatList_LinkList_0_Link_6" href="https://www.cnblogs.com/songwenjie/category/1201669.html">数据结构(7)</a> </li>

                                    </ul>

                                </div>

                            </div><div id="sidebar_topviewedposts" class="sidebar-block">
                                <div id="topview_posts_wrap">
                                    <div class="catListView">
                                        <h3 class="catListTitle">阅读排行榜</h3>
                                        <div id="TopViewPostsBlock"><ul><li><a href="https://www.cnblogs.com/songwenjie/p/8575579.html">1. 原来你是这样的Websocket--抓包分析(20023)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/9014473.html">2. 分享一个开源的网盘下载工具BaiduPCS-Go(16082)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/8955856.html">3. 【图解数据结构】 二叉树遍历(4582)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/9185790.html">4. C#集合类型大揭秘(4400)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/9376719.html">5. MySQL主从复制——主库已有数据的解决方案(3816)</a></li></ul></div>
                                    </div>
                                </div>
                            </div><div id="sidebar_topcommentedposts" class="sidebar-block">
                                <div id="topfeedback_posts_wrap">
                                    <div class="catListFeedback">
                                        <h3 class="catListTitle">评论排行榜</h3>
                                        <div id="TopFeedbackPostsBlock"><ul><li><a href="https://www.cnblogs.com/songwenjie/p/9185790.html">1. C#集合类型大揭秘(20)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/9000713.html">2. 我们为什么要学习？写给我的组员们(17)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/9414960.html">3. 数据库索引背后的数据结构(15)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/8878851.html">4. 【图解数据结构】 树(14)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/8657579.html">5. 【源码分析】你必须知道的string.IsNullOrEmpty &amp;&amp; string.IsNullOrWhiteSpace(10)</a></li></ul></div>
                                    </div>
                                </div>
                            </div><div id="sidebar_topdiggedposts" class="sidebar-block">
                                <div id="topdigg_posts_wrap">
                                    <div class="catListView">
                                        <h3 class="catListTitle">推荐排行榜</h3>
                                        <div id="TopDiggPostsBlock"><ul><li><a href="https://www.cnblogs.com/songwenjie/p/9000713.html">1. 我们为什么要学习？写给我的组员们(65)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/8878851.html">2. 【图解数据结构】 树(59)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/8975365.html">3. 【封装那些事】 缺失封装(55)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/9185790.html">4. C#集合类型大揭秘(43)</a></li><li><a href="https://www.cnblogs.com/songwenjie/p/9414960.html">5. 数据库索引背后的数据结构(23)</a></li></ul></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <script type="text/javascript">loadBlogSideColumn();</script>
                    </div>

                </div><!--end: sideBarMain -->
            </div><!--end: sideBar 侧边栏容器 -->
            <div class="clear"></div>
        </div><!--end: main -->
        <div class="clear"></div>
        <div id="footer">

            <!--done-->
            Copyright ©2019 CoderFocus
            <div>            Powered By             <a href="https://www.cnblogs.com" target="_blank">Cnblogs</a> |             <a href="https://github.com/esofar/cnblogs-theme-silence" target="_blank">Silence</a>             Theme By             <a href="https://www.cnblogs.com/esofar" target="_blank">Esofar</a></div>
        </div><!--end: footer -->
    </div><!--end: home 自定义的最大容器 -->



    <iframe id="blockbyte-bs-sidebar" class="notranslate" data-pos="left"></iframe><div id="blockbyte-bs-indicator" class="blockbyte-bs-fullHeight blockbyte-bs-visible" data-pos="left" style="width: 1px; height: 100%; top: 0%;"><div><span></span></div></div>
    <script type="text/javascript">

        $.silence({
            catalog: {
                enable: true,
                move: true,
                index: true,
                level1: 'h2',
                level2: 'h3',
                level3: 'h4',
            }
        });

        //爱心特效
        (function (window, document, undefined) {
            var hearts = [];
            window.requestAnimationFrame = (function () {
                return window.requestAnimationFrame ||
                    window.webkitRequestAnimationFrame ||
                    window.mozRequestAnimationFrame ||
                    window.oRequestAnimationFrame ||
                    window.msRequestAnimationFrame ||
                    function (callback) {
                        setTimeout(callback, 1000 / 60);
                    }
            })();
            init();
            function init() {
                css(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: absolute;}.heart:after{top: -5px;}.heart:before{left: -5px;}");
                attachEvent();
                gameloop();
            }
            function gameloop() {
                for (var i = 0; i < hearts.length; i++) {
                    if (hearts[i].alpha <= 0) {
                        document.body.removeChild(hearts[i].el);
                        hearts.splice(i, 1);
                        continue;
                    }
                    hearts[i].y--;
                    hearts[i].scale += 0.004;
                    hearts[i].alpha -= 0.013;
                    hearts[i].el.style.cssText = "left:" + hearts[i].x + "px;top:" + hearts[i].y + "px;opacity:" + hearts[i].alpha + ";transform:scale(" + hearts[i].scale + "," + hearts[i].scale + ") rotate(45deg);background:" + hearts[i].color;
                }
                requestAnimationFrame(gameloop);
            }
            function attachEvent() {
                var old = typeof window.onclick === "function" && window.onclick;
                window.onclick = function (event) {
                    old && old();
                    createHeart(event);
                }
            }
            function createHeart(event) {
                var d = document.createElement("div");
                d.className = "heart";
                hearts.push({
                    el: d,
                    x: event.clientX - 5,
                    y: event.clientY - 5,
                    scale: 1,
                    alpha: 1,
                    color: randomColor()
                });
                document.body.appendChild(d);
            }
            function css(css) {
                var style = document.createElement("style");
                style.type = "text/css";
                try {
                    style.appendChild(document.createTextNode(css));
                } catch (ex) {
                    style.styleSheet.cssText = css;
                }
                document.getElementsByTagName('head')[0].appendChild(style);
            }
            function randomColor() {
                return "rgb(" + (~~(Math.random() * 255)) + "," + (~~(Math.random() * 255)) + "," + (~~(Math.random() * 255)) + ")";
            }
        })(window, document);

        //页面放大110%
        //document.getElementsByTagName('body')[0].style.zoom=1.1;
    </script>
    <script type="text/javascript">getFollowStatus('87ccd643-b5bf-e611-845c-ac853d9f53ac')</script>
</body>
</html>